/***
 * axios的二次封装
 * 2019/8/12
 * lixiangsheng
 */

import axios from 'axios'
import { Message } from 'element-ui' //弹框提示
// 创建axios实例
const service = axios.create({
  // baseURL:'', //统一接口
  timeout: 60000 , // 请求超时时间
});

// request拦截器
service.interceptors.request.use(config => {
    let token =JSON.parse(sessionStorage.getItem('token')); //token
    if(!!token){ //有token所有的设置上token+
      config.headers = { 'Content-Type':'application/json; charset=utf-8', 'Authorization':token};
    }else{ //登陆的，token没有那就清楚所有的本地存储，刷新页面自动跳到登陆页面
      config.headers = { 'Content-Type':'application/json; charset=utf-8','Authorization':''};
    }

  return config;
}, error => {
  // Do something with request error
  // console.log(error); // for debug
  Promise.reject(error);
});
// respone拦截器
service.interceptors.response.use(
  //response => response,
  /**
   * 下面的注释为通过response自定义code来标示请求状态，当code返回如下情况为权限有问题，登出并返回到登录页
   * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
   */
  response =>{
    const res = response.data;
    console.log( response.data,' response.data')
    if(response.data.code != 200){ //请求结果不等于200
      if(response.data.code==2016) { //token失效
        Message({
          message: response.data.msg ? response.data.msg : "网络错误",
          type: 'error',
          duration: 3 * 1000,
          dangerouslyUseHTMLString: true
        });
      }else{
        Message({
          message:response.data.msg?response.data.msg:"网络错误",
          type: 'error',
          duration: 3 * 1000,
          dangerouslyUseHTMLString:true
        });
      }
      return {data:{status:false}}//只要不等200返回false；
    }else{
      return response;
    }
  },
  error => {
    if(error&&error.response){ //返回错误
      Message({
        message:error.response.data.status+'!'+ error.response.data.error,
        type: 'error',
        duration: 2 * 1000,
        dangerouslyUseHTMLString:true
      });
    } else{
      Message({
        message:'网络异常，请联系管理员',
        type: 'error',
        duration: 2 * 1000,
        dangerouslyUseHTMLString:true
      });
    }
    return {data:{status:false}}

    // return Promise.reject(error);
  }
);
export default service;
